package canchaFulbito.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;



import canchaFulbito.excepcion.DAOExcepcion;
import canchaFulbito.modelo.Cancha;

import canchaFulbito.util.ConexionBD;

public class CanchaDAO extends BaseDAO {
	public String insertar(Cancha ca) throws DAOExcepcion {
		
		String mensaje="";
		String query = "INSERT INTO CANCHA(NomCancha,Caracteristicas,Foto,Local_idLocal) VALUES (?,?,?,?)";
		
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		int idNro = 0;
		try {
			
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, ca.getNomCancha());
			stmt.setString(2, ca.getCaracteristicas());
			stmt.setString(3, ca.getFoto());
			stmt.setInt(4, ca.getoLocal().getIdLocal());
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				mensaje="No se pudo insertar";
				throw new SQLException("No se pudo insertar");
			}else{
				String ConsultarIdGenerado="SELECT LAST_INSERT_ID()";
				stmt=con.prepareStatement(ConsultarIdGenerado);
				rs=stmt.executeQuery();
				if(rs.next())
				{
					idNro=rs.getInt(1);
				}
				
				ca.setIdCancha(idNro);
				String horario="INSERT INTO horario(Nomhorario,Tarifa,DiaAtencion,HoraAtencion1,HoraAtencion2,Promocion,Cancha_idCancha) values(?,?,?,?,?,?,?)";
				stmt=con.prepareStatement(horario);
				stmt.setString(1,ca.getNonHorario());
				stmt.setDouble(2,ca.getTarifa());
				stmt.setString(3,ca.getDiaAtencion());
				stmt.setString(4,ca.getHora1());
				stmt.setString(5,ca.getHora2());
				stmt.setString(6,ca.getPromocion());
				stmt.setInt(7,ca.getIdCancha());
				
				int h=0;
				h=stmt.executeUpdate();
				if(h!=1)
				{
					mensaje="No se pudo insertar";
					throw new SQLException("No se pudo insertar");
				}else{
					mensaje="<div id='ok'>Se registro satisfactoriamente!</div>";
				}
					
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return mensaje;
	}
	
	public boolean obtener(String NomCancha, int local) throws DAOExcepcion {
		//System.out.println("CanchaDAO: obtener() String NomCancha");
		boolean valor=true;
		
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "select count(*) as nom from Cancha where NomCancha=? and Local_idLocal=?";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, NomCancha);
			stmt.setInt(2, local);
			rs = stmt.executeQuery();
			
			rs.first();
			int nom=rs.getInt("nom");
			//System.out.println(nom);
			if (nom>0)
			{
				valor=false;
			}
			else
			{
				valor=true;
			}
			
			if (rs.next()) {
					throw new SQLException("Cancha Ya Existe, ingrese otra cancha");
			}
			
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return valor;
	}
	
	
	
	public Collection<Cancha> buscar(int Distrito, String dia1, String dia2, String hora1, String hora2) throws DAOExcepcion {
		System.out.println("CanchaDAO: buscarPorDistrito(int Distrito)");
		/*
		String query = "SELECT h.Estado,h.FechaAtencion,h.HoraAtencion,c.idCancha,c.NomCancha,c.Caracteristicas,c.Foto,l.NomLocal,d.NomDistrito" +
				" FROM distrito d, local l, cancha c, horario h" +
				" WHERE d.idDistrito=l.Distrito_idDistrito" +
				" AND l.idLocal=c.Local_idLocal" +
				" AND c.idCancha=h.Cancha_idCancha" +
				" AND DAY(h.FechaAtencion)=? AND HOUR(h.HoraAtencion)=?" +
				" AND l.Distrito_idDistrito =?";
		*/
		//String query = "SELECT NomCancha,Caracteristicas FROM cancha ";
		
		String query = "SELECT distinct c.NomCancha,c.Caracteristicas,l.NomLocal,h.Estado" +
				" FROM distrito d, local l, cancha c, horario h" +
				" WHERE d.idDistrito=l.Distrito_idDistrito" +
				" AND l.idLocal=c.Local_idLocal" +
				" AND c.idCancha=h.Cancha_idCancha" +
				" AND (h.DiaAtencion like '%" + "?" + "%' || h.DiaAtencion like '%" + "?" +"%') AND HOUR(h.HoraAtencion1)>=? AND HOUR(h.HoraAtencion2)<=?" +
				//" AND (h.DiaAtencion like '1' || h.DiaAtencion like '2') AND HOUR(h.HoraAtencion1)>=? AND HOUR(h.HoraAtencion2)<=?" +
				" AND l.Distrito_idDistrito =?";
			
		Collection<Cancha> lista = new ArrayList<Cancha>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			System.out.print("hora1-->"+ hora1);
			System.out.print("hora2-->"+hora2);
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			System.out.print("query-->"+query);
			stmt.setString(1, dia1);
			stmt.setString(2, dia2);
			stmt.setString(3, hora1);
			stmt.setString(4, hora2);
			stmt.setInt(5, Distrito);
			

			rs = stmt.executeQuery();
			while (rs.next()) {
				Cancha vo = new Cancha();				
				vo.setNomCancha(rs.getString("NomCancha"));
				vo.setCaracteristicas(rs.getString("Caracteristicas"));
				vo.setEstado(rs.getString("Estado"));				
				lista.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return lista;
	}
}
